#ifndef STUDENT_H
#define STUDENT_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>

/* 学生信息结构体 */
typedef struct Student {
    int num;          // 序号（自动生成，从1开始递增）
    char id[20];      // 学号（唯一，用于排序和查找）
    char name[50];    // 姓名
    char gender[10];  // 性别（男/女）
    int age;          // 年龄
    struct Student *next;  // 指向下一个节点
} Student;

/**
 * 全局链表头节点（外部声明，在main.c中定义）
*/
extern Student *g_student_list;
/* 全局互斥锁（保护链表操作，外部声明） */
extern pthread_mutex_t g_list_mutex;

//链表操作函数
// 初始化链表（创建空链表）
void init_student_list();

/**
 * 功能 创建新学生节点
 * 返回值
 * 成功：新节点指针
 * 失败：NULL
*/
Student* create_student(int num, const char *id, const char *name, const char *gender, int age);

/**
 * 功能 按学号升序添加学生信息
 * 返回值
 * 成功：0
 * 失败：-1
*/
int add_student(int num, const char *id, const char *name, const char *gender, int age);

/**
 * 功能 删除学生信息（按学号）
 * 返回值
 * 成功：0
 * 失败：-1
*/
int delete_student(const char *id);

/**
 * 功能 修改学生信息（按旧学号）
 * 返回值
 * 成功：0
 * 失败：-1
*/
int update_student(const char *old_id, const char *new_id, const char *new_name, const char *new_gender, int new_age);

/**
 * 功能 查找学生信息（模糊匹配学号/姓名），结果存入result链表
 * 返回值
 * 成功：匹配数量
 * 失败：-1
*/
int search_student(const char *keyword, Student **result);

/**
 * 功能 获取链表长度（用于生成序号num）
 * 返回值
 * 成功：链表长度
 * 失败：-1
*/
int get_list_length();

/**
 * 功能 销毁链表（释放所有节点内存）
 * 返回值 无
*/
void destroy_student_list();

/**
 * 功能 更新链表序号
 * 返回值 无
*/
void update_num();
#endif